# -*- coding: utf-8 -*-
'''
    使用while输出四种的9x9乘法表
'''

def method1_while():
    '''通过i和j控制输出的个数以及换行界限，i每换行一次归1，j每换行增1 '''
    i = 1
    j = 1
    while(1):
        if(j == 10):
            break
        if(i > j):
            i = 1
            j += 1
            print('')
            continue
        print('{} * {} = {}'.format(i, j, i*j),end='\t')
        i += 1

def method2_while():
    '''通过i和j控制输出的个数以及换行界限，i每换行一次归1，j每换行减1，输出的是倒序三角形 '''
    i = 1
    j = 9
    while(1):
        if(j == 0):
            break
        if(i > j):
            i = 1
            j -= 1
            print('')
            continue
        print('{} * {} = {}'.format(i, j, i*j),end='\t')
        i += 1

def method3_while():
    '''通过i和j控制输出的个数以及换行界限，大家的头痛点应该在于i大于j时，如何有规律又美观输出空格
    i每换行一次归9，j每换行加1'''
    i = 9
    j = 1
    while(1):
        if(j == 10):
            break
        if(i > j):
            print('         ', end='\t')
        elif(i <= j):
            if(i == 0):
                i = 9
                j += 1
                print('')
                continue
            print('{} * {} = {}'.format(i, j, i * j), end='\t')
        i -= 1

def method4_while():
    '''通过i和j控制输出的个数以及换行界限，大家的头痛点应该在于i大于j时，如何有规律又美观输出空格
    i每换行一次归9，j每换行减1'''
    i = 9
    j = 9
    while(1):
        if(j == 0):
            break
        if(i > j):
            print('         ', end='\t')
        elif(i <= j):
            if(i == 0):
                i = 9
                j -= 1
                print('')
                continue
            print('{} * {} = {}'.format(i, j, i * j), end='\t')
        i -= 1

#输出界线
def printoutLine():
    print('='*106)

#封装使用while输出的四种方法
def printoutWhile():
    method1_while()
    printoutLine()
    method2_while()
    printoutLine()
    method3_while()
    printoutLine()
    method4_while()

def method1_forin():
    for i in range(1,10):
        for j in range(1,i+1):
            print('{} * {} = {}'.format(i, j, i * j), end='\t')
        print('')

def method2_forin():
    for i in range(1,10):
        for j in range(9,i-1,-1):
            print('{} * {} = {}'.format(i, j, i * j), end='\t')
        print('')

def method3_forin():
    for i in range(1,10):
        for k in range(1,10-i):
                print('         ', end='\t')
        for j in range(i,0,-1):
            print('{} * {} = {}'.format(i, j, i * j), end='\t')
        print('')

def method4_forin():
    for i in range(9,0,-1):
        for k in range(1,10-i):
                print('         ', end='\t')
        for j in range(i,0,-1):
            print('{} * {} = {}'.format(i, j, i * j), end='\t')
        print('')

#封装使用for...in输出的四种方法
def printoutForin():
    method1_forin()
    printoutLine()
    method2_forin()
    printoutLine()
    method3_forin()
    printoutLine()
    method4_forin()

#调用两种方法输出
printoutWhile()
printoutLine()
printoutForin()